package tutorial.jpa.model;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;


@Entity
@Table(name="Auto")
public class Auto 
{ 
    @Id
//    @GeneratedValue(strategy = GenerationType.AUTO)
    private String matricola; 
    
    @Column(name="modello", length=100, nullable = false)
    private String modello; 
    
    private String marca; 
    private int annoImmatricolazione; 
     
    @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    private Motore motore;
    
    @ManyToOne
    private Concessionario concessionario;
    
    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable( name = "auto_persona",
    			joinColumns = { @JoinColumn(name = "auto_id") },
    			inverseJoinColumns = { @JoinColumn(name = "persona_id") } )
    private List<Persona> conducenti = new ArrayList<Persona>();
    
    public Auto(){} 
    public String getMatricola() { return matricola; } 
    public void setMatricola(String matricola) { this.matricola = matricola; }  
 
    public String getModello() { return modello; } 
    public void setModello(String modello) { this.modello = modello; } 
 
    public String getMarca() { return marca; } 
    public void setMarca(String marca) { this.marca = marca; } 
 
    public int getAnnoImmatricolazione() { return annoImmatricolazione; } 
    public void setAnnoImmatricolazione(int annoImmatricolazione) { this.annoImmatricolazione = annoImmatricolazione; } 
 
    
    public List<Persona> getConducenti() {
		return conducenti;
	}
	public void setConducenti(List<Persona> conducenti) {
		this.conducenti = conducenti;
	}
	public Motore getMotore() {
		return motore;
	}
	public void setMotore(Motore motore) {
		this.motore = motore;
	}
	
	public Concessionario getConcessionario() {
		return concessionario;
	}
	public void setConcessionario(Concessionario concessionario) {
		this.concessionario = concessionario;
	}
	public String toString(){
        return "* Matricola: "+ getMatricola() + 
               " - Modello: " + getModello() +
               " - Marca: " + getMarca() +
               " - Anno di immatricolazione: " + 
               getAnnoImmatricolazione() ;
   } 
} 